home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Utilities / StartupSelector / Source / StartupSelectorPrefs.e < prev   
Encoding:
Text File  |  1997-09-11  |  24.3 KB  |  825 lines

  1. -> best reading with a tabsize of 2
  2.  
  3. /* GadToolsBox GUI: E source generated by SrcGen v0.5    */
  4. /*                 (by Wouter & Martin Kuchinka & Jason) */
  5.  
  6. OPT OSVERSION=37,PREPROCESS
  7.  
  8. #define VERS '1.1'
  9.  
  10. MODULE 'raphe/asciifp','raphe/freezewindow','raphe/directorylist'
  11.  
  12. MODULE 'gadtools','libraries/gadtools'
  13. MODULE 'exec/memory','exec/lists','exec/nodes'
  14. MODULE 'graphics/modeid','graphics/rastport','graphics/displayinfo',
  15.               'graphics/text','graphics/view','graphics/gfx'
  16. MODULE 'intuition/intuition','intuition/screens','intuition/gadgetclass',
  17.              'intuition/iobsolete'
  18. MODULE 'utility/tagitem'
  19. MODULE 'devices/inputevent'
  20. MODULE 'reqtools','libraries/reqtools'
  21. MODULE 'asl','libraries/asl'
  22. MODULE 'locale','libraries/locale'
  23.  
  24. ENUM ERROR_NONE,ERROR_CONTEXT,ERROR_GADGET,ERROR_SCRN,ERROR_VISUAL,ERROR_GT,
  25.          ERROR_LOC,ERROR_WINDOW,ERROR_MENUS
  26.  
  27. ENUM ALWAYSOPENED=1,DOUBLECLICK,STARTUPSDIR,DEFSTARTUP,QUALIFIER,SCREENMODE,
  28.          GETSDIR,GETDEFS,GETSM,CANCEL,SAVE,USE,LISTVIEW,FONT,FSIZE,
  29.          SOUNDS,EDITOR,LANGUAGE,GETEDITOR
  30.  
  31. ENUM MSG_DCLICK,MSG_ALWAYSO,MSG_SOUNDS,MSG_LBUT,MSG_RBUT,MSG_MBUT,MSG_LALT,MSG_RALT,
  32.          MSG_LSHIFT,MSG_RSHIFT,MSG_LCOM,MSG_RCOM,MSG_CTRL,MSG_TOOPENW,MSG_SDIR,MSG_DEFS,
  33.          MSG_ED,MSG_LANG,MSG_SMODE,MSG_FONT,MSG_SAVE,MSG_USE,MSG_CANCEL,MSG_OK,
  34.          MSG_PROJECT,MSG_ABOUT,MSG_QUIT,
  35.          MSG_CHSMODE,MSG_CHFONT,MSG_CHDIR,MSG_CHED,
  36.          MSG_ERROR,MSG_ERRDIR,
  37.          MSG_CANT,MSG_ERRCONTEXT,MSG_ERRGADGETS,MSG_ERRSCREEN,MSG_ERRVISUAL,MSG_ERRGT,
  38.          MSG_ERRLOC,MSG_ERROPENW,MSG_ERRMENUS
  39.  
  40. ENUM MEN_ABOUT=1,MEN_QUIT
  41.  
  42. RAISE ERROR_CONTEXT    IF CreateContext()=NIL,
  43.             ERROR_GADGET    IF CreateGadgetA()=NIL
  44.  
  45. OBJECT gadslist
  46.     defstart
  47.     startdir
  48.     dclick
  49.     alwayso
  50.     sounds
  51.     qual
  52.     smode
  53.     lv
  54.     font
  55.     editor
  56.     lang
  57. ENDOBJECT
  58.  
  59. DEF    mainwindow=NIL:PTR TO window,
  60.         mainwindowmenus,
  61.         mainwindowglist,
  62.         defstartwnd=NIL:PTR TO window,
  63.         defstartglist=NIL,
  64.         scr=NIL:PTR TO screen,
  65.         visual=NIL,
  66.         offx,offy,
  67.         tattr:PTR TO textattr,ys,
  68.         wbhere=FALSE,
  69.         afp=NIL:PTR TO asciifp,fw=NIL:PTR TO freezewindows,dl=NIL:PTR TO directorylist,
  70.         startupsdirstr:PTR TO CHAR,defstartupstr:PTR TO CHAR,
  71.         editorstr:PTR TO CHAR,langstr:PTR TO CHAR,
  72.         modeid,
  73.         item:PTR TO menuitem,
  74.         gad:gadslist,
  75.         cat=NIL
  76.         
  77. DEF ni:nameinfo
  78.  
  79. PROC setupscreen()
  80.     IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN RETURN ERROR_GT
  81.     IF (scr:=LockPubScreen(NIL))=NIL THEN RETURN ERROR_SCRN
  82.     tattr:=scr.font
  83.     ys:=tattr.ysize
  84.     IF (visual:=GetVisualInfoA(scr,NIL))=NIL THEN RETURN ERROR_VISUAL
  85.     offx:=scr.wborleft
  86.     offy:=scr.wbortop+scr.rastport.txheight+1
  87. ENDPROC
  88.  
  89. PROC closedownscreen()
  90.     IF visual THEN FreeVisualInfo(visual)
  91.     IF scr THEN UnlockPubScreen(NIL,scr)
  92.     IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
  93. ENDPROC
  94.  
  95. PROC openmainwindowwindow()
  96.     DEF g:PTR TO gadget,wbr
  97.     DEF wleft,wtop,wwidth,wheight
  98.     DEF displayid,dims:dimensioninfo
  99.     DEF str[20]:STRING
  100.     DEF soffy,gw,cs:PTR TO LONG -> gadw et comparestrings
  101.     DEF stringInfo:PTR TO stringinfo
  102.  
  103.     soffy:=offy
  104.     wbr:=scr.wborright
  105.  
  106.     g:=CreateContext({mainwindowglist})
  107.  
  108.     g:=CreateGadgetA(CHECKBOX_KIND,g,
  109.                                     [offx+6,offy+2,26,ys+3,gcs(MSG_DCLICK),
  110.                                     tattr,2,PLACETEXT_RIGHT,visual,DOUBLECLICK]:newgadget,
  111.                                     [GTCB_CHECKED,afp.getkeyword(DOUBLECLICK),
  112.                                     GT_UNDERSCORE,"_",
  113.                                     TAG_END])
  114.     gad.dclick:=g
  115.  
  116.     g:=CreateGadgetA(CHECKBOX_KIND,g,
  117.                                     [offx+6,offy+6+ys,26,ys+3,gcs(MSG_ALWAYSO),tattr,1,
  118.                                     PLACETEXT_RIGHT,visual,ALWAYSOPENED]:newgadget,
  119.                                     [GT_UNDERSCORE,"_",
  120.                                      GTCB_CHECKED,afp.getkeyword(ALWAYSOPENED),
  121.                                      TAG_END])
  122.     gad.alwayso:=g
  123.  
  124.     g:=CreateGadgetA(CHECKBOX_KIND,g,
  125.                                     [offx+6,(2*ys)+offy+10,26,ys+3,gcs(MSG_SOUNDS),
  126.                                     tattr,2,PLACETEXT_RIGHT,visual,SOUNDS]:newgadget,
  127.                                     [GTCB_CHECKED,afp.getkeyword(SOUNDS),
  128.                                     GT_UNDERSCORE,"_",
  129.                                     TAG_END])
  130.     gad.sounds:=g
  131.  
  132.     offy:=3*ys+soffy+17
  133.     gw:=maxwidth(cs:=[gcs(MSG_LBUT),gcs(MSG_RBUT),gcs(MSG_MBUT),
  134.                                         gcs(MSG_LALT),gcs(MSG_RALT),
  135.                                         gcs(MSG_LSHIFT),gcs(MSG_RSHIFT),
  136.                                         gcs(MSG_LCOM),gcs(MSG_RCOM),gcs(MSG_CTRL),NIL])
  137.     g:=CreateGadgetA(CYCLE_KIND,g,
  138.                                     [offx+6,offy+3,gw+30,ys+5,gcs(MSG_TOOPENW),tattr,3,
  139.                                     PLACETEXT_RIGHT,visual,QUALIFIER]:newgadget,
  140.                                     [GTCY_LABELS,cs,
  141.                                      GT_UNDERSCORE,"_",
  142.                                      GTCY_ACTIVE,    afp.getkeyword(QUALIFIER),
  143.                                      TAG_END])
  144.     gad.qual:=g
  145.  
  146.     offy:=4*ys+soffy+28
  147.     gw:=maxwidth([gcs(MSG_SDIR),gcs(MSG_DEFS),gcs(MSG_ED),gcs(MSG_LANG)])+8
  148.     g:=CreateGadgetA(STRING_KIND,g,  -> 201
  149.                                     [offx+gw,offy+3,(342-gw),ys+6,gcs(MSG_SDIR),tattr,6,
  150.                                     PLACETEXT_LEFT,visual,STARTUPSDIR]:newgadget,
  151.                                     [GTST_MAXCHARS,$200,
  152.                                      GT_UNDERSCORE,"_",
  153.                                      GTST_STRING,  afp.getkeyword(STARTUPSDIR),
  154.                                      TAG_END])
  155.     stringInfo:=g.specialinfo
  156.     startupsdirstr:=stringInfo.buffer
  157.     gad.startdir:=g
  158.  
  159.     g:=CreateGadgetA(BUTTON_KIND,g,
  160.                                     [-(25+wbr),offy+3,20,ys+6,'*',tattr,9,PLACETEXT_IN,visual,
  161.                                     GETSDIR]:newgadget,
  162.                                     [GT_UNDERSCORE,"_",
  163.                                      TAG_END])
  164.     g.flags:=g.flags OR GFLG_RELRIGHT
  165.  
  166.     g:=CreateGadgetA(STRING_KIND,g,
  167.                                     [offx+gw,ys+offy+10,(342-gw),ys+6,gcs(MSG_DEFS),tattr,7,
  168.                                     PLACETEXT_LEFT,visual,DEFSTARTUP]:newgadget,
  169.                                     [GTST_MAXCHARS,$200,
  170.                                      GT_UNDERSCORE,"_",
  171.                                      GTST_STRING,  afp.getkeyword(DEFSTARTUP),
  172.                                      TAG_END])
  173.     stringInfo:=g.specialinfo
  174.     defstartupstr:=stringInfo.buffer
  175.     gad.defstart:=g
  176.  
  177.     g:=CreateGadgetA(BUTTON_KIND,g,
  178.                                     [-(25+wbr),ys+offy+10,20,ys+6,'*',tattr,9,PLACETEXT_IN,visual,
  179.                                     GETDEFS]:newgadget,
  180.                                     [GT_UNDERSCORE,"_",
  181.                                      TAG_END])
  182.     g.flags:=g.flags OR GFLG_RELRIGHT
  183.  
  184.     g:=CreateGadgetA(STRING_KIND,g,
  185.                                     [offx+gw,(2*ys)+offy+17,(342-gw),ys+6,gcs(MSG_ED),tattr,7,
  186.                                     PLACETEXT_LEFT,visual,EDITOR]:newgadget,
  187.                                     [GTST_MAXCHARS,$200,
  188.                                      GT_UNDERSCORE,"_",
  189.                                      GTST_STRING,  afp.getkeyword(EDITOR),
  190.                                      TAG_END])
  191.     stringInfo:=g.specialinfo
  192.     editorstr:=stringInfo.buffer
  193.     gad.editor:=g
  194.  
  195.     g:=CreateGadgetA(BUTTON_KIND,g,
  196.                                     [-(25+wbr),(2*ys)+offy+17,20,ys+6,'*',tattr,9,PLACETEXT_IN,visual,
  197.                                     GETEDITOR]:newgadget,
  198.                                     [GT_UNDERSCORE,"_",
  199.                                      TAG_END])
  200.     g.flags:=g.flags OR GFLG_RELRIGHT
  201.  
  202.     g:=CreateGadgetA(STRING_KIND,g,
  203.                                     [offx+gw,(3*ys)+offy+24,(364-gw),ys+6,gcs(MSG_LANG),tattr,7,
  204.                                     PLACETEXT_LEFT,visual,LANGUAGE]:newgadget,
  205.                                     [GTST_MAXCHARS,$200,
  206.                                      GT_UNDERSCORE,"_",
  207.                                      GTST_STRING,  afp.getkeyword(LANGUAGE),
  208.                                      TAG_END])
  209.     stringInfo:=g.specialinfo
  210.     langstr:=stringInfo.buffer
  211.     gad.lang:=g
  212.  
  213.     offy:=8*ys+61+soffy
  214.     gw:=maxwidth([gcs(MSG_SMODE),gcs(MSG_FONT)])+8
  215.     GetDisplayInfoData(NIL, ni, SIZEOF nameinfo, DTAG_NAME, modeid)
  216.     g:=CreateGadgetA(TEXT_KIND,g,
  217.                                     [offx+gw,offy+3,(342-gw),ys+6,gcs(MSG_SMODE),tattr,8,
  218.                                     PLACETEXT_LEFT,visual,SCREENMODE]:newgadget,
  219.                                     [GTTX_BORDER,1,
  220.                                      GTTX_TEXT,ni.name,
  221.                                      GT_UNDERSCORE,"_",
  222.                                      TAG_END])
  223.     gad.smode:=g
  224.  
  225.     g:=CreateGadgetA(BUTTON_KIND,g,
  226.                                     [-(25+wbr),offy+3,20,ys+6,'*',tattr,9,PLACETEXT_IN,visual,
  227.                                     GETSM]:newgadget,
  228.                                     [GT_UNDERSCORE,"_",
  229.                                      TAG_END])
  230.     g.flags:=g.flags OR GFLG_RELRIGHT
  231.  
  232.     StringF(str,'\s(0,24) \d',afp.getkeyword(FONT),afp.getkeyword(FSIZE))
  233.     g:=CreateGadgetA(TEXT_KIND,g,
  234.                                     [offx+gw,ys+offy+10,(342-gw),ys+6,gcs(MSG_FONT),tattr,8,
  235.                                     PLACETEXT_LEFT,visual,NIL]:newgadget,
  236.                                     [GTTX_BORDER,1,
  237.                                      GTTX_TEXT,str,
  238.                                      GT_UNDERSCORE,"_",
  239.                                      TAG_END])
  240.     gad.font:=g
  241.  
  242.     g:=CreateGadgetA(BUTTON_KIND,g,
  243.                                     [-(25+wbr),ys+offy+10,20,ys+6,'*',tattr,9,PLACETEXT_IN,visual,
  244.                                     FONT]:newgadget,
  245.                                     [GT_UNDERSCORE,"_",
  246.                                      TAG_END])
  247.     g.flags:=g.flags OR GFLG_RELRIGHT
  248.     
  249.  
  250.     offy:=10*ys+80+soffy
  251.     g:=CreateGadgetA(BUTTON_KIND,g,
  252.                                     [offx+6,offy+3,92,ys+6,gcs(MSG_SAVE),tattr,12,PLACETEXT_IN,
  253.                                     visual,SAVE]:newgadget,
  254.                                     [GT_UNDERSCORE,"_",
  255.                                      TAG_END])
  256.     g:=CreateGadgetA(BUTTON_KIND,g,
  257.                                     [offx+139,offy+3,92,ys+6,gcs(MSG_USE),tattr,12,PLACETEXT_IN,
  258.                                     visual,USE]:newgadget,
  259.                                     [GT_UNDERSCORE,"_",
  260.                                      TAG_END])
  261.     g:=CreateGadgetA(BUTTON_KIND,g,
  262.                                     [-(97+wbr),offy+3,92,ys+6,gcs(MSG_CANCEL),tattr,10,PLACETEXT_IN,
  263.                                     visual,CANCEL]:newgadget,
  264.                                     [GT_UNDERSCORE,"_",
  265.                                      TAG_END])
  266.     g.flags:=g.flags OR GFLG_RELRIGHT
  267.  
  268.     IF (mainwindowmenus:=CreateMenusA(
  269.         [NM_TITLE,0,gcs(MSG_PROJECT),0,0,0,0,
  270.             NM_ITEM,0,gcs(MSG_ABOUT),'?',0,0,MEN_ABOUT,
  271.             NM_ITEM,0,NM_BARLABEL,0,0,0,0,
  272.             NM_ITEM,0,gcs(MSG_QUIT),'Q',0,0,MEN_QUIT,
  273.          0,0,0,0,0,0,0]:newmenu,NIL))=NIL THEN RETURN ERROR_MENUS
  274.     IF LayoutMenusA(mainwindowmenus,visual,NIL)=FALSE THEN RETURN ERROR_MENUS
  275.  
  276.     wwidth:=370
  277.     wheight:=11*ys+92
  278.     offy:=soffy
  279.  
  280.     displayid:=GetVPModeID(scr.viewport)
  281.     GetDisplayInfoData(NIL,dims,SIZEOF dimensioninfo,DTAG_DIMS,displayid)
  282.     wleft:=-scr.viewport.dxoffset+((dims.stdoscan.maxx-wwidth)/2)
  283.     wtop:=-scr.viewport.dyoffset+((dims.stdoscan.maxy-wheight)/2)
  284.  
  285.     IF (mainwindow:=OpenWindowTagList(NIL,
  286.         [WA_LEFT,wleft,
  287.          WA_TOP,wtop,
  288.          WA_INNERWIDTH,wwidth,
  289.          WA_INNERHEIGHT,wheight,
  290.          WA_IDCMP,IDCMP_NEWSIZE OR IDCMP_REFRESHWINDOW OR IDCMP_GADGETDOWN OR
  291.                             IDCMP_GADGETUP OR IDCMP_MENUPICK OR IDCMP_CLOSEWINDOW OR
  292.                             IDCMP_VANILLAKEY,
  293.          WA_FLAGS,WFLG_DRAGBAR OR WFLG_DEPTHGADGET OR
  294.                             WFLG_CLOSEGADGET OR WFLG_SIZEBBOTTOM OR WFLG_SMART_REFRESH OR
  295.                             WFLG_ACTIVATE, ->OR WFLG_SIZEGADGET,
  296.          WA_TITLE,{strvers}+6,
  297.          WA_CUSTOMSCREEN,scr,
  298.          WA_MINWIDTH,wwidth,
  299.          WA_MINHEIGHT,wheight,
  300.          WA_MAXWIDTH,-1,
  301.          WA_MAXHEIGHT,offy+132,
  302.          WA_AUTOADJUST,TRUE,
  303.          WA_NEWLOOKMENUS,TRUE,
  304.          WA_GADGETS,mainwindowglist,
  305.          TAG_END]))=NIL THEN RETURN ERROR_WINDOW
  306.     drawbevel(mainwindow)
  307.     IF SetMenuStrip(mainwindow,mainwindowmenus)=FALSE THEN RETURN ERROR_MENUS
  308.     Gt_RefreshWindow(mainwindow,NIL)
  309. ENDPROC
  310.  
  311. PROC drawbevel(win:PTR TO window)
  312.     DEF rport,width,tags
  313.     rport:=win.rport
  314.     width:=win.width-offx-4
  315.     tags:=[GT_VISUALINFO,visual,TAG_END]
  316.  
  317.     DrawBevelBoxA(rport,offx,offy,width,3*ys+17,tags)
  318.     DrawBevelBoxA(rport,offx,3*ys+17+offy,width,ys+11,tags)
  319.     DrawBevelBoxA(rport,offx,4*ys+28+offy,width,4*ys+33,tags)
  320.     DrawBevelBoxA(rport,offx,8*ys+61+offy,width,2*ys+19,tags)
  321.     DrawBevelBoxA(rport,offx,10*ys+80+offy,width,12+ys,tags)
  322. ENDPROC
  323.  
  324. PROC closemainwindowwindow()
  325.     IF mainwindow
  326.         ClearMenuStrip(mainwindow)
  327.         IF mainwindowmenus THEN FreeMenus(mainwindowmenus)
  328.         CloseWindow(mainwindow)
  329.     ENDIF
  330.     IF mainwindowglist THEN FreeGadgets(mainwindowglist)
  331. ENDPROC
  332.  
  333. PROC opendefstartwindow() HANDLE
  334.     DEF g:PTR TO gadget,lvw,lvh,item
  335.     DEF err,ioerr,errstr[128]:STRING,ch[128]:STRING
  336.     IF (g:=CreateContext({defstartglist}))=NIL THEN RETURN ERROR_CONTEXT
  337.     err,ioerr:=dl.dirlist(startupsdirstr,DLF_NODIRS,'~(#?.info|#?.bak)')
  338.     IF err
  339.         StringF(ch,'\s\n',gcs(MSG_ERRDIR))
  340.         Fault(ioerr,ch,errstr,128)
  341.         req(errstr,gcs(MSG_ERROR))
  342.         RETURN FALSE
  343.     ENDIF
  344.     lvw:=dl.maxlen*8+28
  345.     IF dl.total()>10 THEN lvh:=10*ys+4    ELSE lvh:=dl.total()*ys+4
  346.     item:=dl.getpos(defstartupstr)
  347.     IF item=-1 THEN item:=0
  348.     IF (g:=CreateGadgetA(LISTVIEW_KIND,g,
  349.         [0,0,lvw,lvh,'',tattr,1,0,visual,LISTVIEW]:newgadget,
  350.         [GTLV_LABELS,dl.dirlist,
  351.          GTLV_SHOWSELECTED,0,
  352.          GTLV_TOP,item,
  353.          GTLV_SELECTED,item,
  354.          TAG_END]))=NIL THEN RETURN ERROR_GADGET
  355.     gad.lv:=g
  356.     IF (defstartwnd:=OpenWindowTagList(NIL,
  357.         [WA_LEFT,mainwindow.leftedge+mainwindow.width-30,
  358.          WA_TOP,mainwindow.topedge+offy+66,
  359.          WA_WIDTH,lvw,
  360.          WA_HEIGHT,lvh,
  361.          WA_IDCMP,IDCMP_GADGETDOWN OR IDCMP_GADGETUP OR IDCMP_INACTIVEWINDOW OR
  362.                             IDCMP_RAWKEY OR IDCMP_MOUSEBUTTONS OR LISTVIEWIDCMP,
  363.          WA_FLAGS,WFLG_SMART_REFRESH OR WFLG_ACTIVATE OR WFLG_RMBTRAP OR WFLG_BORDERLESS,
  364.          WA_CUSTOMSCREEN,scr,
  365.          WA_AUTOADJUST,TRUE,
  366.          WA_NEWLOOKMENUS,TRUE,
  367.          WA_GADGETS,defstartglist,
  368.          TAG_END]))=NIL THEN RETURN ERROR_WINDOW
  369.     Gt_RefreshWindow(defstartwnd,NIL)
  370. EXCEPT
  371.     closedefstartwindow()
  372.     RETURN FALSE
  373. ENDPROC TRUE
  374.  
  375. PROC closedefstartwindow()
  376.     IF defstartwnd THEN CloseWindow(defstartwnd)
  377.     IF defstartglist THEN FreeGadgets(defstartglist)
  378.     defstartwnd:=NIL
  379.     defstartglist:=NIL
  380. ENDPROC
  381.  
  382. PROC process(win:PTR TO window)
  383.     DEF running=TRUE, userdata,g:PTR TO gadget
  384.     DEF node:PTR TO ln
  385.     DEF bool
  386.     DEF class,code,iaddr,qual,mainwin=FALSE
  387.     IF win=mainwindow THEN mainwin:=TRUE
  388.  
  389.     WHILE running
  390.         class,code,iaddr,qual:=wait4message(win)
  391.         SELECT class
  392.         CASE IDCMP_CLOSEWINDOW ; running:=FALSE
  393.         CASE IDCMP_MOUSEBUTTONS ; IF code=MENUDOWN THEN running:=FALSE
  394.         CASE IDCMP_GADGETUP
  395.             g:=iaddr
  396.             userdata:=g.userdata
  397.             SELECT userdata
  398.             CASE GETSDIR
  399.                 fw.freezewindow(win)
  400.                 getfile(TRUE)
  401.                 fw.activatewindow(win)
  402.             CASE GETDEFS
  403.                 fw.freezewindow(win)
  404.                 IF opendefstartwindow()
  405.                     process(defstartwnd)
  406.                     closedefstartwindow()
  407.                 ENDIF
  408.                 fw.activatewindow(win)
  409.             CASE GETEDITOR
  410.                 getfile()
  411.             CASE GETSM
  412.                 fw.freezewindow(win)
  413.                 getsmode()
  414.                 fw.activatewindow(win)
  415.             CASE CANCEL ; running:=FALSE
  416.             CASE SAVE 
  417.                 save()
  418.                 running:=FALSE
  419.             CASE USE
  420.                 save(TRUE)
  421.                 running:=FALSE
  422.             CASE LISTVIEW
  423.                 node:=dl.getnode(code)
  424.                 Gt_SetGadgetAttrsA(gad.defstart,mainwindow,NIL,[GTST_STRING,node.name,NIL])
  425.                 running:=FALSE
  426.             CASE FONT
  427.                 getfont()
  428.             ENDSELECT
  429.  
  430.         CASE IDCMP_INACTIVEWINDOW
  431.             running:=FALSE
  432.         CASE IDCMP_MENUPICK
  433.             g:=code AND $FFFF
  434.             WHILE g<>MENUNULL
  435.                 item:=ItemAddress(win.menustrip,g)
  436.                 userdata:=GTMENUITEM_USERDATA(item)
  437.                 SELECT userdata
  438.                 CASE MEN_ABOUT ;req('StartupSelectorPrefs\nVersion '+VERS+'\n'+
  439.                                                         'Copyright © 1997 by RaphE\n\nFor\n\n'+
  440.                                                         'StartupSelector\n'+
  441.                                                         'Copyright © 1996-97\nMoonchild Prod.\n',gcs(MSG_ABOUT))
  442.                 CASE MEN_QUIT ; running:=FALSE
  443.                 ENDSELECT
  444.                 g:=item.nextselect AND $FFFF
  445.             ENDWHILE
  446.             
  447.         CASE IDCMP_VANILLAKEY
  448.             SELECT 128 OF code
  449.             CASE "a","A"    -> alwaysopened
  450.                 Gt_GetGadgetAttrsA(gad.alwayso,mainwindow,NIL,[GTCB_CHECKED,{bool},NIL])
  451.                 bool:=IF bool THEN 0 ELSE 1
  452.                 Gt_SetGadgetAttrsA(gad.alwayso,mainwindow,NIL,[GTCB_CHECKED,bool,NIL])
  453.             CASE "c","C"    -> doubleclick
  454.                 Gt_GetGadgetAttrsA(gad.dclick,mainwindow,NIL,[GTCB_CHECKED,{bool},NIL])
  455.                 bool:=IF bool THEN 0 ELSE 1
  456.                 Gt_SetGadgetAttrsA(gad.dclick,mainwindow,NIL,[GTCB_CHECKED,bool,NIL])
  457.             CASE "o","O"    -> qualifier
  458.                 Gt_GetGadgetAttrsA(gad.qual,mainwindow,NIL,[GTCY_ACTIVE,{qual},NIL])
  459.                 INC qual
  460.                 IF qual=9 THEN qual:=0
  461.                 Gt_SetGadgetAttrsA(gad.qual,mainwindow,NIL,[GTCY_ACTIVE,qual,NIL])
  462.             CASE "s"            -> startupdirs
  463.                 ActivateGadget(gad.startdir,mainwindow,NIL)
  464.             CASE "S"            -> startupdirs requester
  465.                 fw.freezewindow(win)
  466.                 getfile(TRUE)
  467.                 fw.activatewindow(win)
  468.             CASE "D"            -> defaultstartup
  469.                 ActivateGadget(gad.defstart,mainwindow,NIL)
  470.             CASE "d"            -> defaultstartup requester
  471.                 fw.freezewindow(win)
  472.                 opendefstartwindow()
  473.                 process(defstartwnd)
  474.                 closedefstartwindow()
  475.                 fw.activatewindow(win)
  476.             CASE "f","F" -> font
  477.                 getfont()
  478.             CASE "m","M"    -> screenmode
  479.                 fw.freezewindow(win)
  480.                 getsmode()
  481.                 fw.activatewindow(win)
  482.             CASE "e","E"    -> save
  483.                 save()
  484.                 running:=FALSE
  485.             CASE "l","L"    -> cancel
  486.                 running:=FALSE
  487.             ENDSELECT
  488.         CASE IDCMP_RAWKEY
  489.             SELECT code
  490.             CASE 68 -> RETURN
  491.                 Gt_GetGadgetAttrsA(gad.lv,win,NIL,[GTLV_SELECTED,{bool},NIL])
  492.                 node:=dl.getnode(bool)
  493.                 Gt_SetGadgetAttrsA(gad.defstart,mainwindow,NIL,[GTST_STRING,node.name,NIL])
  494.                 running:=FALSE                
  495.             CASE 69 -> ESC
  496.                 running:=FALSE
  497.             CASE 76 -> UP
  498.                 Gt_GetGadgetAttrsA(gad.lv,win,NIL,[GTLV_SELECTED,{bool},NIL])
  499.                 DEC bool
  500.                 IF bool<0 THEN bool:=0
  501.                 Gt_SetGadgetAttrsA(gad.lv,win,NIL,[GTLV_SELECTED,bool,NIL])
  502.             CASE 77 -> DOWN
  503.                 Gt_GetGadgetAttrsA(gad.lv,win,NIL,[GTLV_SELECTED,{bool},NIL])
  504.                 INC bool
  505.                 Gt_SetGadgetAttrsA(gad.lv,win,NIL,[GTLV_SELECTED,bool,NIL])            
  506.             ENDSELECT
  507.  
  508.         ENDSELECT
  509.     ENDWHILE
  510. ENDPROC
  511.  
  512. PROC save(use=FALSE)
  513.     DEF bool
  514.     afp.setkeyword(STARTUPSDIR,startupsdirstr)
  515.     afp.setkeyword(DEFSTARTUP,defstartupstr)
  516.     afp.setkeyword(EDITOR,editorstr)
  517.     afp.setkeyword(LANGUAGE,langstr)
  518.     Gt_GetGadgetAttrsA(gad.dclick,mainwindow,NIL,[GTCB_CHECKED,{bool},NIL])
  519.     afp.setkeyword(DOUBLECLICK,bool)
  520.     Gt_GetGadgetAttrsA(gad.alwayso,mainwindow,NIL,[GTCB_CHECKED,{bool},NIL])
  521.     afp.setkeyword(ALWAYSOPENED,bool)
  522.     Gt_GetGadgetAttrsA(gad.sounds,mainwindow,NIL,[GTCB_CHECKED,{bool},NIL])
  523.     afp.setkeyword(SOUNDS,bool)
  524.     Gt_GetGadgetAttrsA(gad.qual,mainwindow,NIL,[GTCY_ACTIVE,{bool},NIL])
  525.     afp.setkeyword(QUALIFIER,bool)
  526.     afp.setkeyword(SCREENMODE,modeid)
  527.     IF Not(use) THEN afp.save()
  528.     afp.save('RAM:startupselector.prefs')
  529. ENDPROC
  530.  
  531. PROC wait4message(win:PTR TO window)
  532.     DEF mes:PTR TO intuimessage,port
  533.     DEF class=NIL,code,iaddr,qual
  534.     port:=win.userport
  535.     REPEAT
  536.         IF mes:=Gt_GetIMsg(port)
  537.             IF (class:=mes.class)=IDCMP_REFRESHWINDOW
  538.                 Gt_BeginRefresh(win)
  539.                 Gt_EndRefresh(win,TRUE)
  540.             ENDIF
  541.             code:=mes.code
  542.             iaddr:=mes.iaddress
  543.             qual:=mes.qualifier
  544.             Gt_ReplyIMsg(mes)
  545.         ELSE
  546.             WaitPort(port)
  547.         ENDIF
  548.     UNTIL class
  549. ENDPROC class,code,iaddr
  550.  
  551. PROC getfile(nofile=FALSE)
  552.     DEF rtfreq:PTR TO rtfilerequester
  553.     DEF freq:PTR TO filerequester
  554.     DEF fname[108]:STRING,dir[$200]:STRING
  555.     DEF title
  556.  
  557.     fw.freezewindow(mainwindow)
  558.  
  559.     IF nofile
  560.         title:=gcs(MSG_CHDIR)
  561.     ELSE
  562.         title:=gcs(MSG_CHED)
  563.         StrCopy(fname,FilePart(editorstr))
  564.         StrCopy(dir,editorstr,PathPart(editorstr)-editorstr)
  565.     ENDIF
  566.  
  567.     IF reqtoolsbase
  568.         IF (rtfreq:=RtAllocRequestA(RT_FILEREQ,NIL))
  569.             IF nofile
  570.                 RtChangeReqAttrA(rtfreq,[RTFI_DIR,startupsdirstr,NIL])
  571.             ELSE
  572.                 RtChangeReqAttrA(rtfreq,[RTFI_DIR,dir,NIL])
  573.             ENDIF
  574.             RtFileRequestA(rtfreq,fname,            title,
  575.                                              [RT_WINDOW,            mainwindow,
  576.                                                 RTFI_FLAGS,            IF nofile THEN FREQF_NOFILES ELSE NIL,
  577.                                                 NIL])
  578.             IF nofile
  579.                 Gt_SetGadgetAttrsA(gad.startdir,mainwindow,NIL,[GTST_STRING,rtfreq.dir,NIL])
  580.             ELSE
  581.                 StrCopy(dir,rtfreq.dir)
  582.                 AddPart(dir,fname,$200)
  583.                 Gt_SetGadgetAttrsA(gad.editor,mainwindow,NIL,[GTST_STRING,dir,NIL])
  584.             ENDIF
  585.             RtFreeRequest(rtfreq)
  586.         ENDIF        
  587.     ELSEIF aslbase
  588.         IF (freq:=AllocAslRequest(ASL_FILEREQUEST,NIL))
  589.             AslRequest(freq, [ASLFR_WINDOW,                        mainwindow,
  590.                                                 ASLFR_TITLETEXT,                title,
  591.                                                 ASLFR_INITIALFILE,            fname,
  592.                                                 ASLFR_INITIALDRAWER,        dir,
  593.                                                 ASLFR_DRAWERSONLY,            TRUE,
  594.                                                 NIL])
  595.             IF nofile
  596.                 Gt_SetGadgetAttrsA(gad.startdir,mainwindow,NIL,[GTST_STRING,freq.drawer,NIL])
  597.             ELSE
  598.                 StrCopy(dir,freq.drawer)
  599.                 AddPart(dir,freq.file,$200)
  600.                 Gt_SetGadgetAttrsA(gad.editor,mainwindow,NIL,[GTST_STRING,dir,NIL])
  601.             ENDIF
  602.             FreeAslRequest(freq)
  603.         ENDIF
  604.     ENDIF
  605.  
  606.     fw.activatewindow(mainwindow)
  607. ENDPROC
  608.  
  609. PROC getsmode()
  610.     DEF rtsmreq:PTR TO rtscreenmoderequester
  611.     DEF smreq:PTR TO screenmoderequester
  612.  
  613.     fw.freezewindow(mainwindow)
  614.  
  615.     IF aslbase
  616.         IF (smreq:=AllocAslRequest(ASL_SCREENMODEREQUEST,NIL))
  617.             AslRequest(smreq,[ASLSM_WINDOW,                        mainwindow,
  618.                                                 ASLSM_TITLETEXT,                gcs(MSG_CHSMODE),
  619.                                                 ASLSM_INITIALDISPLAYID,    modeid,
  620.                                                 ASLSM_INITIALLEFTEDGE,    mainwindow.leftedge+mainwindow.width-30,
  621.                                                 ASLSM_INITIALTOPEDGE,        mainwindow.topedge+offy+85,
  622.                                                 ASLSM_INITIALWIDTH,            256,
  623.                                                 ASLSM_INITIALHEIGHT,        141,
  624.                                                 NIL])
  625.             modeid:=smreq.displayid
  626.             FreeAslRequest(smreq)
  627.         ENDIF
  628.     ELSEIF reqtoolsbase
  629.         IF (rtsmreq:=RtAllocRequestA(RT_SCREENMODEREQ,NIL))
  630.             RtScreenModeRequestA(rtsmreq,    gcs(MSG_CHSMODE),
  631.                                      [RT_WINDOW,            mainwindow,
  632.                                         RT_LEFTOFFSET,    mainwindow.leftedge+mainwindow.width-30,
  633.                                         RT_TOPOFFSET,        mainwindow.topedge+offy+85,
  634.                                         NIL])
  635.             modeid:=rtsmreq.displayid
  636.             RtFreeRequest(rtsmreq)
  637.         ENDIF
  638.     ENDIF
  639.  
  640.     GetDisplayInfoData(NIL, ni, SIZEOF nameinfo, DTAG_NAME, modeid)
  641.     Gt_SetGadgetAttrsA(gad.smode,mainwindow,NIL,[GTTX_TEXT,ni.name,NIL])
  642.  
  643.     fw.activatewindow(mainwindow)
  644. ENDPROC
  645.  
  646. PROC getfont()
  647.     DEF rtfontreq:PTR TO rtfontrequester
  648.     DEF fontreq:PTR TO fontrequester
  649.     DEF str[30]:STRING
  650.  
  651.     fw.freezewindow(mainwindow)
  652.  
  653.     IF aslbase
  654.         IF (fontreq:=AllocAslRequest(ASL_FONTREQUEST,NIL))
  655.             AslRequest(fontreq,[ASLFO_WINDOW,                    mainwindow,
  656.                                                 ASLFO_TITLETEXT,                gcs(MSG_CHFONT),
  657.                                                 ASLFO_INITIALLEFTEDGE,    mainwindow.leftedge+mainwindow.width-100,
  658.                                                 ASLFO_INITIALTOPEDGE,        mainwindow.topedge+offy+10,
  659.                                                 ASLFO_INITIALNAME,            afp.getkeyword(FONT),
  660.                                                 ASLFO_INITIALSIZE,            afp.getkeyword(FSIZE),
  661.                                                 NIL])
  662.             StringF(str,'\s(0,24) \d',fontreq.attr.name,fontreq.attr.ysize)
  663.             afp.setkeyword(FONT,fontreq.attr.name)
  664.             afp.setkeyword(FSIZE,fontreq.attr.ysize)
  665.             FreeAslRequest(fontreq)
  666.         ENDIF
  667.     ELSEIF reqtoolsbase
  668.     ENDIF
  669.  
  670.     Gt_SetGadgetAttrsA(gad.font,mainwindow,NIL,[GTTX_TEXT,str,NIL])
  671.  
  672.     fw.activatewindow(mainwindow)
  673. ENDPROC
  674.  
  675. PROC req(msg,title,buttons=NIL)
  676.     IF buttons=NIL THEN buttons:=gcs(MSG_OK)
  677.     IF reqtoolsbase
  678.         RETURN RtEZRequestA(msg,buttons,0,0,[    RTEZ_FLAGS,        EZREQF_CENTERTEXT,
  679.                                                                                     RT_REQPOS,        REQPOS_CENTERSCR,
  680.                                                                                     RTEZ_REQTITLE,title,
  681.                                                                                     NIL])
  682.     ELSE
  683.         RETURN EasyRequestArgs(NIL,[20,0,title,msg,buttons],0,NIL)
  684.     ENDIF
  685. ENDPROC
  686.  
  687. PROC gcs(id)    -> get catalog string
  688.     DEF strs:PTR TO LONG
  689.  
  690.     strs:=[    'Double _click to launch startup',
  691.                     'Window _always opened',
  692.                     'Sounds',
  693.                     'Left button','Right button','Middle button',
  694.                     'Left Alt','Right Alt','Left Shift','Right Shift',
  695.                     'Left Command','Right Command','Control',
  696.                     'to _open the window',
  697.                     '_Startups dir:','_Default startup:',
  698.                     'Path to Editor:','Language:',
  699.                     'Screen _mode:','_Font:',
  700.                     'Sav_e','Use','Cance_l','Ok',
  701.                     'Project','About','Quit',
  702.                     'Choose a screen mode',
  703.                     'Choose a font',
  704.                     'Choose a directory',
  705.                     'Choose an editor',
  706.                     'Error !',
  707.                     'Problem while listing directory',
  708.                     'Can\at','create context','create gadgets','lock screen',
  709.                     'get visual infos','open gadtools.library v37+',
  710.                     'open locale.library v38+',
  711.                     'open window','create menus'
  712.                 ]:LONG
  713. ENDPROC    GetCatalogStr(cat,id,strs[id])
  714.  
  715.  
  716. PROC maxwidth(strs:PTR TO LONG)
  717.     DEF w,j,mw=0
  718.     FOR j:=0 TO ListLen(strs)-1
  719.         IF strs[j]
  720.             IF (w:=textwidth(strs[j]))>mw THEN mw:=w
  721.         ENDIF
  722.     ENDFOR
  723. ENDPROC mw
  724.  
  725. PROC textwidth(text) IS IntuiTextLength([0,0,0,0,0,tattr,text,NIL]:intuitext)
  726.  
  727. PROC main() HANDLE
  728.     DEF err=ERROR_NONE,ls,fh,ch[256]:STRING
  729.  
  730.     IF (localebase:=OpenLibrary('locale.library',38))=NIL THEN Raise(ERROR_LOC)
  731.  
  732.     ls:= ['LEFTBUTTON','RIGHTBUTTON','MIDDLEBUTTON',
  733.                 'LEFTALT','RIGHTALT','LEFTSHIFT','RIGHTSHIFT',
  734.                 'LEFTCOMMAND','RIGHTCOMMAND','CONTROL']
  735.  
  736.     NEW afp.new([
  737.                                 ['Double click ?',    DOUBLECLICK,    VAL_YESNO,    YES],
  738.                                 ['Window always opened ?',    ALWAYSOPENED,    VAL_YESNO,    NO],
  739.                                 ['Sounds ?',    SOUNDS,    VAL_ONOFF,    ON],
  740.  
  741.                                 ['Path to editor:',    EDITOR,    VAL_STR,    'C:Ed'],
  742.                                 ['Startups directory:',    STARTUPSDIR,    VAL_STR,    'S:Start/'],
  743.                                 ['Default startup:',    DEFSTARTUP,    VAL_STR,    {startseq}],
  744.                                 ['Language:',    LANGUAGE,    VAL_STR,    'anglais'],
  745.  
  746.                                 ['Qualifier:',    QUALIFIER,    ls,    0],
  747.  
  748.                                 ['Screen mode:',    SCREENMODE,    VAL_HEX,    $29000],
  749.                                 ['Font:',    FONT,    VAL_STR,    'topaz.font'],
  750.                                 ['Font size:',    FSIZE,    VAL_DEC,    8],
  751.  
  752.                                 ['Last startup:',    NIL,    VAL_STR,    {startseq}],
  753.                                 ['Disable User-Startup ?',    NIL,    VAL_YESNO,    NO],
  754.                                 ['Disable WBStartup ?',    NIL,    VAL_YESNO,    NO]
  755.                             ])
  756.     IF afp.load({usename}) THEN afp.load({prefsname})
  757.  
  758.     cat:=OpenCatalogA(NIL,'StartupSelectorPrefs.catalog',
  759.                                       [OC_LANGUAGE,afp.getkeyword(LANGUAGE),
  760.                                         NIL])
  761.  
  762.     afp.setstringvers({strvers})
  763.     modeid:=afp.getkeyword(SCREENMODE)
  764.  
  765.     NEW fw.init()
  766.     NEW dl.new()
  767.  
  768.     reqtoolsbase:=OpenLibrary('reqtools.library',37)
  769.     aslbase:=OpenLibrary('asl.library',36)
  770.  
  771.     IF (err:=setupscreen())<>ERROR_NONE THEN Raise(err)
  772.     IF FindTask('Workbench')
  773.         wbhere:=TRUE
  774.     ELSE
  775.         fh:=Open({scriptname},NEWFILE)
  776.         Write(fh,{monitors},StrLen({monitors}))
  777.         Close(fh)
  778.         
  779.         Execute({executestr},0,0)
  780.         DeleteFile({scriptname})
  781.     ENDIF
  782.     openmainwindowwindow()
  783.     process(mainwindow)
  784.     closemainwindowwindow()
  785.     IF CtrlC() THEN Raise(ERROR_NONE)
  786. EXCEPT DO
  787.     IF exception
  788.  
  789.         StringF(ch,'\s \s !',    gcs(MSG_CANT),
  790.                                 ListItem([gcs(MSG_ERRCONTEXT),gcs(MSG_ERRGADGETS),
  791.                                                     gcs(MSG_ERRSCREEN),gcs(MSG_ERRVISUAL),
  792.                                                     gcs(MSG_ERRGT),gcs(MSG_ERRLOC),
  793.                                                     gcs(MSG_ERROPENW),gcs(MSG_ERRMENUS)
  794.                                                  ],exception-1))
  795.         req(ch,gcs(MSG_ERROR))
  796.     ENDIF
  797.     IF afp AND (FileLength({prefsname})=TRUE) THEN afp.save()
  798.     IF afp THEN END afp
  799.     END fw
  800.     END dl
  801.     closedownscreen()
  802.     IF aslbase THEN CloseLibrary(aslbase)
  803.     IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
  804.     IF cat THEN CloseCatalog(cat)
  805.     IF localebase THEN CloseLibrary(localebase)
  806. ENDPROC
  807.  
  808. strvers: CHAR '$VER: startupselectorprefs ',VERS,0
  809.  
  810. monitors:
  811. CHAR 'IF EXISTS DEVS:Monitors\n'
  812. CHAR 'IF EXISTS DEVS:Monitors/VGAOnly\n'
  813. CHAR 'DEVS:Monitors/VGAOnly\n'
  814. CHAR 'EndIF\n'
  815. CHAR 'C:List >NIL: DEVS:Monitors/~(#?.info|VGAOnly) TO RAM:M LFORMAT "DEVS:Monitors/%s"\n'
  816. CHAR 'Execute RAM:M\n'
  817. CHAR 'C:Delete >NIL: RAM:M\n'
  818. CHAR 'EndIF\n'
  819. CHAR 0 -> EndOfFile
  820.  
  821. executestr: CHAR 'Execute '
  822. scriptname: CHAR 'RAM:mon.sc',0
  823. startseq: CHAR 'Startup-Sequence',0
  824. prefsname: CHAR 'S:startupselector.prefs',0
  825. usename: CHAR 'RAM:startupselector.prefs',0